package com.saer.server.network;

import java.io.IOException;
import java.net.ServerSocket;

import com.saer.server.network.logica.mensajes.MensajeTexto;
import com.saer.server.network.red.AtencionAlCliente;
import com.saer.server.network.red.ConectionManager;
import com.saer.server.network.red.ServerKeepAliveSocket;
import com.saer.server.service.NetworkService;

// Escucha mensajes que vienen de la Chacra
public class CapServer extends Thread {

	private NetworkService networkService = null;
	private ConectionManager cm;

	public CapServer(NetworkService networkService) {
		super();
		this.networkService = networkService;
		cm = new ConectionManager();
	}

	public void run() {
		boolean en_escucha = true;
		ServerSocket server_sokect = null;

		try {
			server_sokect = new ServerSocket(networkService.getSaerProperties().getServerPort());
			System.out.println("Esperando Visitas en el Puerto [" + networkService.getSaerProperties().getServerPort() + "]");
		} catch (IOException e) {
			System.err.println("Hubo un error en la conexion.");
			return;
		}

		try {
			
			new DaemonThread();

			while (en_escucha) {
				new AtencionAlCliente(server_sokect.accept(), networkService, cm).start();
			}

			server_sokect.close();

		} catch (IOException e) {
			e.printStackTrace();
		} // Fin catch

	} // Fin run

	public synchronized void sendMsjTxt(int chacraId, MensajeTexto msj)	throws IOException {
		ServerKeepAliveSocket kas = cm.buscar(chacraId);
		kas.send(msj);
	}
}
